<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>finally</title>
</head>
<body>
<script>

  /*
  * finally用于executor函数执行完成之后的下一步操作，如果没有finally的话我们想在异步操作结束后进行其他的操作只能将代码写在executor函数中
  * 这样无法做到关注点分离
  *
  * */
  new Promise(((resolve, reject) => {
    setTimeout(()=>{
      resolve(1000)
    },1000)
  })).finally(()=>{
    // console.log("数据成功发送");
    /*
    * finally中的如果返回的一个fulfilled状态的Promise不会影响Promise的状态,返回的的Promise会被忽略
    *  但是如果返回的是Rejected状态的话会改变状态
    *
    * 总结: finally中没有必要返回一个fulfilled状态的Promise，因为返回值会被忽略，但是可以返回一个rejected状态的Promise
    *      会调用之后的catch
    * */


    // return new Promise(resolve => {
    //   console.log("数据成功发送");
    //   resolve(10001)
    // })

    return  new Promise(((resolve, reject) => {
      console.log("数据成功发送");
      reject(10001)

    }))
  }).then(value => {
    console.log(value);
    /*
    * 这里的catch是全局异常捕获 捕获的是第一个出现错误的地方
    * */
  }).catch(err =>{
    console.log(err);
  })



</script>
</body>
</html>